package org.liuwei.concucrent.base02_cas.AtomicBoolean_041;
import java.util.concurrent.atomic.AtomicBoolean;
 /**
  * 
 * @Title: AtomicBooleanTest.java 
 * @Package org.liuwei.concucrent.base02_cas.AtomicReference_04 
 * @Description: TODO(用一句话描述该文件做什么) 
 * @author 刘伟  15818570028@163.com   
 * @date 2016年8月18日 下午10:45:21 
 * @version V1.0
 * 这里有10个线程，我们让他们几乎同时去征用boolean值的修改，修改成功者输出：我成功了！
 * 此时你运行完你会发现只会输出一个“我成功了！”，说明征用过程中达到了锁的效果。
  */
public class AtomicBooleanTest {
 
    /**
     * 主要方法：
     * @see AtomicBoolean#compareAndSet(boolean, boolean) 
     *  第一个参数为原始值，第二个参数为要修改的新值，若修改成功则返回true，否则返回false
     * @see AtomicBoolean#getAndSet(boolean)  
     *  尝试设置新的boolean值，直到成功为止，返回设置前的数据
     */
    public final static AtomicBoolean TEST_BOOLEAN = new AtomicBoolean();
 
    public static void main(String []args) {
        for(int i = 0 ; i < 10 ; i++) {
            new Thread() {
                public void run() {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    if(TEST_BOOLEAN.compareAndSet(false, true)) {
                        System.out.println("我成功了！");
                    }
                }
            }.start();
        }
    }
}